<?php
/*
    $this->render('arquivo'); // Rederiza um view

*/
date_default_timezone_set('America/Sao_Paulo');
App::uses('CakeEmail', 'Network/Email');
App::uses('Tools', 'Lib');
App::uses('ChamadoRN', 'Lib');

class ChamadoController extends AppController {

	public $uses = array('Unidade', 'Area', 'Chamado', 'DadosTecnico', 'Pessoa', 'Grupo', 'SubGrupo',
        'Prioridade', 'Situacao', 'Escopo', 'ObservacoesInternas', 'Interacoes', 'Indicador','AfetaAtividades', 'Login'
    );
	//public $layout = 'telaChamados';
    public $layout = 'padrao_tela';
    private $usuarioLogado;


    /**
    * Envia email. Parar teste só chamar o método email
    * @param array $solicitante
    * @param array $interacoes
    */
    private function email($solicitante, $interacoes = array(), $chamado, $msg_tecnico = null) {
        /*Captura a url atual.*/
        $url = $_SERVER ['REQUEST_URI'];
        $url_partes = explode("/", $url);
        $url = $_SERVER['SERVER_NAME'] . $url_partes[0] . "/". $url_partes[1]. "/";
        $dadosTecnico = $this->Pessoa->buscaPessoaPorId($chamado['id_dados_tecnico']);

        $texto = "\n Acompanhamento do atendimento: \n\n";
        foreach ($interacoes as $key => $interacao) {
            $texto .= $interacao['observacao'] . "\n";
        }


        $email = new CakeEmail();
        $email->config('gmail');
        $email->to($solicitante['Pessoa']['email']);
        //$email->to('emailpap2013@gmail.com');
        $email->from(array($dadosTecnico['Pessoa']['email'] => $dadosTecnico['Pessoa']['nome']));
        $email->subject('Alteração no chamado');

        $unidade = $this->Unidade->buscaUnidadePorId($solicitante['Pessoa']['id_unidade']);
        $area = $this->Area->buscaAreaPorId($solicitante['Pessoa']['id_area']);

        if($chamado['id_situacao_chamado'] == 5){//Chamados Encerrados
            $texto .= "Diga sua opnião sobre nosso atendimento: " . $url . "PesquisaSatisfacao";
        }

        if(!is_null($msg_tecnico)){
            $texto .= "\nClique no link para responder o técnico:. http://" . $url . "Chamado/resposta/" . base64_encode($chamado['id']) . "\n";
        }

        $texto .= "\nDados do Chamado: ";
        $texto .= "\nNúmero: #" . $chamado['id'];
        $texto .= "\nData: " . Tools::formataData($chamado['data_abertura']);
        $texto .= "\nSolicitante: " . $solicitante['Pessoa']['nome'];
        $texto .= "\nTelefone: " . $solicitante['Pessoa']['telefone'];
        $texto .= "\nÁrea: " . $area['Area']['descricao'];
        $texto .= "\nUnidade: " . $unidade['Unidade']['descricao'];
        $texto .= "\nDescrição: " . $chamado['descricao_chamado'];

        $unidade = $this->Unidade->buscaUnidadePorId($dadosTecnico['Pessoa']['id_unidade']);
        $area = $this->Area->buscaAreaPorId($dadosTecnico['Pessoa']['id_area']);

        $texto .= "\n\n Dados Técnico Responsável: ";
        $texto .= "\n Nome: " . $dadosTecnico['Pessoa']['nome'];
        $texto .= "\n Email: " . $dadosTecnico['Pessoa']['email'];
        $texto .= "\n Telefone: " . $dadosTecnico['Pessoa']['telefone'];
        $texto .= "\n Área: " . $area['Area']['descricao'];
        $texto .= "\n Unidade: " . $unidade['Unidade']['descricao'];

        //$email->send($texto); //Comentado por cauda da Positivo - Banca

    }

	public function beforeRender(){

	}

    public function tela(){
        $usuarioLogado = $this->Session->read('UsuarioLogado');
        $chamados = $this->Chamado->buscaChamdosNaoEncerradosPorTecnico($usuarioLogado['id_pessoa']);

        $chamados_detalhados = array();

        foreach ($chamados as $i => $chamado) {
            $solicitante = $this->Pessoa->buscaPessoaPorId($chamado['Chamado']['id_pessoa']);
            $tecnico = $this->Pessoa->buscaPessoaPorId($chamado['Chamado']['id_dados_tecnico']);

            $chamados_detalhados[$i]['Solicitante'] = $solicitante['Pessoa'];
            $chamados_detalhados[$i]['Tecnico'] = $solicitante['Pessoa'];
            $chamados_detalhados[$i]['Chamado'] = $chamado['Chamado'];
            $chamados_detalhados[$i]['Chamado']['descricao_situacao'] = $this->Situacao->buscaDescricaoPorId($chamado['Chamado']['id_situacao_chamado']);
            $chamados_detalhados[$i]['Chamado']['descricao_prioridade'] = $this->Prioridade->buscaDescricaoPorId($chamado['Chamado']['id_prioridade']);
        }

        $this->set('chamados_detalhados', $chamados_detalhados);

    }

    public function index(){
            $this->layout = 'telaChamados';
    }

    public function update($id_chamado){

        $this->Chamado->id = $id_chamado;
        if($this->request->is('get')){
            $this->request->data = $this->Chamado->read();
        }
        else{
            $usuarioLogado = $this->Session->read('UsuarioLogado');

            //Faz a busca do chamado atual na base
            $busca_chamado_base = $this->Chamado->read();
            $chamado_base = $busca_chamado_base['Chamado'];
            $detalhes_chamado = $this->request->data['detalhes_chamado'];


            /**
             * Regra não deixar que a classificação do chamado volte a anterior.
             * De acordo com a modelagem 24/04/2013 uma simples verificação:
             * Se o id da classificação registrada na base for maior que o novo id preenchido, 
             * resolve isso pois os campos foram criados na ordem de classificação.
             */
            if($chamado_base['id_indicador'] > $detalhes_chamado['id_classificar_chamado']){
                //$this->Session->write("msg_erro", "Não é possivel voltar classificação do chamado.");
                $this->redirect(array('action' => 'escopo_chamado/' . $chamado_base['id']));
                return;
            }

            /**
            * Regra não deixa pular uma classificação do chamado.
            * A classificação do chamado deve seguir em sequencia de 1 em 1.
            * A verificação de que se o chamado inserido for maior do que o chamado atualmente registrado na base + 1 resolve.
            */
            if($detalhes_chamado['id_classificar_chamado'] > $chamado_base['id_indicador'] + 1){
                $this->Session->write("msg_erro", "Não é possivel pular classificação do chamado.");
                $this->redirect(array('action' => 'escopo_chamado/' . $chamado_base['id']));
                return;
            }

            if($detalhes_chamado['responsavel'] != $chamado_base['id_dados_tecnico']){
                $chamado_base['id_situacao_chamado'] = 2;//Atribuido;
            }

            if(!empty($detalhes_chamado['horas_realizadas']) || !empty($detalhes_chamado['data_antendimento'])){
                /**
                 * Se os status do chamado for alterado para encerrado deve chamar o metodo ecerrar();
                 * que é o responsável por ecerrar o chamados, assim mantem as regras centralizadas.
                 */

                $this->encerrar($id_chamado, $detalhes_chamado);
                return;
            }

            $chamado = array();
            if($chamado_base['id_indicador'] < $detalhes_chamado['id_classificar_chamado']){
                $nova_data = Tools::somarDias($chamado_base['data_vencimento'], 30);
                $chamado['data_vencimento'] = Tools::formataDataMySQL($nova_data);
            }


            if($detalhes_chamado['sub-grupo'] != $chamado_base['id_sub_grupo']){
                $sub_grupo = $this->SubGrupo->buscaPorId($detalhes_chamado['sub-grupo']);
                $nova_data = Tools::somarDias($chamado_base['data_vencimento'], $sub_grupo['SubGrupo']['prazo']);
                $chamado['data_vencimento'] = Tools::formataDataMySQL($nova_data);
            }

            $chamado['id_grupo'] = $detalhes_chamado['grupo'];
            $chamado['id_sub_grupo'] = $detalhes_chamado['sub-grupo'];
            $chamado['id_indicador'] = $detalhes_chamado['id_classificar_chamado'];
            $chamado['id_area'] = $chamado_base['id_area'];
            $chamado['id_unidade'] = $chamado_base['id_unidade'];
            //$chamado['data_abertura'] = $chamado_base['data_abertura'];
            //$chamado['data_atendimento'] = Tools::formataDataMySQL($detalhes_chamado['data_antendimento']);
            $chamado['hora_prevista'] = $detalhes_chamado['horas_previstas'];
            $chamado['hora_realizada'] = $detalhes_chamado['horas_realizadas'];
            $chamado['id_prioridade'] = $detalhes_chamado['prioridade'];
            $chamado['id_situacao_chamado'] = $chamado_base['id_situacao_chamado'];
            $chamado['id_dados_tecnico'] = $detalhes_chamado['responsavel'];
            $chamado['descricao_chamado'] = $chamado_base['descricao_chamado'];
            $chamado['id_escopo'] = $detalhes_chamado['escopo'];
            $chamado['solucao_chamado'] = $detalhes_chamado['solucao_chamado'];

            $this->Chamado->set($busca_chamado_base);//Deve passar o chamado na base para vertificar se ele já está encerrado.

            if ($this->Chamado->validates()) {
                // se validar

                //Se o chamado da base não estiver encerrado ou seja id_situacao_chamado for diferente de 5.
                if($this->Chamado->save($chamado, array('validate' => false))){

                    $msg_tecnico = $detalhes_chamado['msg_tecnico'];
                    if(empty($detalhes_chamado['msg_tecnico'])){
                        $msg_tecnico = null;
                    }
                    //print_r($detalhes_chamado);exit;
                    $interacoes = ChamadoRN::defineInteracao($usuarioLogado, $detalhes_chamado, $chamado_base);

                    if(!is_null($interacoes)){
                        foreach($interacoes as $interacao){
                            $this->Interacoes->save($interacao);
                        }
                        if($detalhes_chamado['notificar'] == "1"){
                            $this->email(
                                $this->Pessoa->buscaPessoaPorId($chamado_base['id_pessoa']), 
                                $interacoes, 
                                $chamado_base,
                                $msg_tecnico
                            );
                            $interacao['data_envio_notificacao'] = date('Y/m/d H:i:s');
                            $usuarioLogado = $this->Session->read('UsuarioLogado');
                            $interacao['id_tecnico_env_notificacao'] = $usuarioLogado['id_pessoa'];
                            $this->Interacoes->save($interacao);
                        }
                    }
                    else{
                        if(!is_null($msg_tecnico)){
                            $this->email(
                                $this->Pessoa->buscaPessoaPorId($chamado_base['id_pessoa']), 
                                array(), 
                                $chamado_base,
                                $msg_tecnico
                            );
                            $this->Session->write("msg_sucesso", "Mensagem enviada ao solicitante.");
                            $this->redirect(array('action' => 'escopo_chamado/' . $chamado_base['id']));
                        }
                    }
                    $this->Session->write("msg_sucesso", "Chamado atualizado com sucesso");
                }
                else{
                    //Se o chamado da base já estiver encerrado ou seja id_situacao_chamado for igual há 5.
                    $this->Session->write("msg_erro", "Erro ao salvar chamado verifique os campos");
                }

            }
            else {
                // Não validar.
                $erros = $this->Chamado->validationErrors;
                $this->Session->write('validation_errors', $erros);
            }

        }
        $this->redirect(array('action' => 'escopo_chamado/' . $chamado_base['id']));
    }




    public function observacoesTecnicas($numero_chamado){
        //$this->layout = '';

        $this->Chamado->id = $numero_chamado;

        if ($this->request->is('post')) {

            $busca_chamado_base = $this->Chamado->read();
            $chamado_base = $busca_chamado_base['Chamado'];
            $this->preencheObservacoesInterna($this->request->data['ObservacoesTecnicas'], $chamado_base);
            $this->redirect(array('action' => 'detalhes_chamado/'.$this->Chamado->id));
        }

        if ($this->request->is('get')) {
            $observacoes_internas = $this->ObservacoesInternas->buscaPorChamado($numero_chamado);
            $detalhes_observacoes_internas = $this->detalhes_do_tecnico_por_observacoes_internas($observacoes_internas);
            $this->set('detalhes_observacoes_internas', $detalhes_observacoes_internas);
        }
    }

    private function preencheObservacoesInterna($detalhes_chamado, $chamado_base){

        if(strlen($detalhes_chamado['obs_chamado']) > 0){
            $usuarioLogado = $this->Session->read('UsuarioLogado');
            $observacao_internas = array();
            $observacao_internas['observacao'] = $detalhes_chamado['obs_chamado'];
            $observacao_internas['id_dados_tecnico'] = $usuarioLogado['id_pessoa'];
            $observacao_internas['id_chamado'] = $chamado_base['id'];
            $observacao_internas['data_hora_observacao'] = date('Y/m/d H:i:s');
            return $this->ObservacoesInternas->save($observacao_internas);
        }
        return true;
    }

    public function geral_menu_direito($numero_chamado){
        $this->layout = '';

        $dados_chamado = $this->Chamado->buscaChamdoPorId($numero_chamado);

        $solicitante = $this->Pessoa->buscaPessoaPorId($dados_chamado['Chamado']['id_pessoa']);
        $unidade_solicitante = $this->Unidade->buscaUnidadePorId($solicitante['Pessoa']['id_unidade']);
        $area_solicitante = $this->Area->buscaAreaPorId($solicitante['Pessoa']['id_area']);

        $solicitante['Chamados'] = $this->Chamado->buscaChamadosPorPessoa($solicitante['Pessoa']['id']);

        $usuarioLogado = $this->Session->read('UsuarioLogado');
        $chamados_tecnico = $this->Chamado->buscaChamdosNaoEncerradosPorTecnico($usuarioLogado['id_pessoa']);
        foreach($chamados_tecnico as $i => $chamado_tecnico){
            $solicitante_em_espera =  $this->Pessoa->buscaPessoaPorId($chamado_tecnico['Chamado']['id_pessoa']);
            $chamados_tecnico[$i]['Solicitante'] = $solicitante_em_espera['Pessoa'];
            $descricao_prioridade = $this->Prioridade->buscaDescricaoPorId($chamado_tecnico['Chamado']['id_prioridade']);
            $chamados_tecnico[$i]['descricao_prioridade'] = $descricao_prioridade;
        }

        $this->set('chamados_tecnico', $chamados_tecnico);
        $this->set('area_solicitante', $area_solicitante);
        $this->set('unidade_solicitante', $unidade_solicitante);
        $this->set('solicitante', $solicitante);


    }

    private function preencheInteracoes($detalhes_chamado, $chamado_base){

        if(strlen($detalhes_chamado['obs_chamado']) > 0){
            $interacoes = array();
            $interacoes['observacao'] = $detalhes_chamado['obs_chamado'];
            $interacoes['id_chamado'] = $chamado_base['id'];
            $interacoes['id_dados_tecnico'] = $detalhes_chamado['responsavel'];
            $interacoes['data_hora_observacao'] = date('Y/m/d H:i:s');

            return $this->Interacoes->save($interacoes);


        }
        return true;
    }

    public function add(){

    	$this->layout = "form_simples";
    	$areas = $this->Area->listaAreas();
		$unidades =  $this->Unidade->listaUnidades();
		$this->set('areas', $areas);
        $this->set('unidades', $unidades);
        $this->set('afetaAtividades', $this->AfetaAtividades->listaAfetaAtividades());

        $analista_chamado = $this->Login->buscar_tecnico_analista();

        if(empty($analista_chamado)){
            $this->Session->write("msg_erro", "Não há um técnico definido para receber o chamado, informe o Dep. TI por telefone.");
        }

        if ($this->request->is('post')) {
            $aberturaChamado = $this->request->data['AbrirChamado'];
            $pessoa = $this->Pessoa->buscaPessoaPorEmail($aberturaChamado['email']);
            //echo var_dump($pessoa['id']);
            if(!is_null($pessoa)){

			$abrirChamado['id_pessoa'] = $pessoa['id'];
			$abrirChamado['id_grupo'] = null;
			$abrirChamado['id_sub_grupo'] = null;
			$abrirChamado['id_indicador'] = null;
            if(
                empty($aberturaChamado['Area'])
                || empty($aberturaChamado['Unidade'])
                || empty($aberturaChamado['afetaAtividades'])
                || empty($aberturaChamado['descricao'])
            ){
              $erros = $this->Chamado->validationErrors;
              $this->Session->write('validation_errors', $erros);
              $this->Session->write("msg_erro", "Verifique se preencheu os campos corretamente!");
              $this->redirect(array('action' => '/add'));
            }

            $abrirChamado['id_area'] = $aberturaChamado['Area'];
            $abrirChamado['id_unidade'] = $aberturaChamado['Unidade'];
			$abrirChamado['data_abertura'] = date('Y/m/d H:i:s');
			$abrirChamado['data_vencimento'] = null;
			$abrirChamado['data_atendimento'] = null;
			$abrirChamado['horas_previstas'] = null;
			$abrirChamado['horas_realizadas'] = null;
			$abrirChamado['id_prioridade'] = 1;
			$abrirChamado['id_situacao_chamado'] = 1;
			$abrirChamado['id_dados_tecnico'] = $analista_chamado['DadosTecnico']['id_pessoa'];
			$abrirChamado['descricao_chamado'] = $aberturaChamado['descricao'];
            $abrirChamado['id_atividades_diarias'] = $aberturaChamado['afetaAtividades'];

            $this->Chamado->set($abrirChamado);
            if ($this->Chamado->validates()) {

                    if ($this->Chamado->save($abrirChamado,array("validate" => false))) {
                        $abrirChamado['id'] = $this->Chamado->id;
                        $interacoes = array();

                        $texto = "Chamado enviado ao Departamento de TI. ";
                        $texto .= "\nAguarde que entraremos em contato.\n";
                        $interacoes[]['observacao'] = $texto;
                        $pessoa_email = array();
                        $pessoa_email['Pessoa'] = $pessoa;
                        $this->email($pessoa_email, $interacoes, $abrirChamado, null);
                        $this->Session->write("msg_sucesso", "Aguarde que entraremos em contato.");
                        $this->redirect(array('action' => '/add'));
                    }
                    else{
                          $erros = $this->Chamado->validationErrors;
                          $this->Session->write('validation_errors', $erros);
                          $this->Session->write("msg_erro", "Email inválido!");
                  }
                }
                    }
            else{
                  $erros = $this->Chamado->validationErrors;
                  $this->Session->write('validation_errors', $erros);
                  $this->Session->write("msg_erro", "Email inválido!");
            }

        }
    }
    public function detalhes_do_tecnico_por_observacoes_internas($observacoes_internas){

        foreach($observacoes_internas as $i => $observacao_interna){
            $detalhes_tecnico = $this->DadosTecnico->busca_detalhes_tecnico_por_id($observacao_interna['ObservacoesInternas']['id_dados_tecnico']);
            $observacoes_internas[$i]['Pessoa'] = $detalhes_tecnico['Pessoa'];
            $observacoes_internas[$i]['DadosTecnico'] = $detalhes_tecnico['DadosTecnico'];
        }
        //print_r($observacoes_internas);exit;
        return $observacoes_internas;

    }
    public function escopo_chamado($numero_chamado){
        $this->layout = 'padrao_tela';
        $this->set('numero_chamado', $numero_chamado);

    }

    public function detalhes_chamado($numero_chamado){
        //$this->layout = "padrao_tela";

        $dados_chamado = $this->Chamado->buscaChamdoPorId($numero_chamado);
        //$this->Session->write('numero_chamado', $numero_chamado);


        $area_descricao = $this->Area->buscaAreaPorId($dados_chamado['Chamado']['id_area']);
        $unidade_descricao = $this->Unidade->buscaUnidadePorId($dados_chamado['Chamado']['id_unidade']);
        $dados_chamado['Chamado']['area_descricao'] = $area_descricao['Area']['descricao'];
        $dados_chamado['Chamado']['unidade_descricao'] = $unidade_descricao['Unidade']['descricao'];

        $areas = $this->Area->listaAreas();
        $unidades =  $this->Unidade->listaUnidades();

        $grupo = $this->Grupo->listaGrupo();
        $subGrupo = $this->SubGrupo->listaSubGrupo();
        $prioridade = $this->Prioridade->listaPrioridade();

        $responsavel = $this->DadosTecnico->busca_detalhes_tecnico_por_id($dados_chamado['Chamado']['id_dados_tecnico']);

        $listaNomesTecnicos = $this->Login->listaNomesTecnicos();
        $solicitante = $this->Pessoa->buscaPessoaPorId($dados_chamado['Chamado']['id_pessoa']);
        $situacao = $this->Situacao->listaSituacao();
        $unidade_solicitante = $this->Unidade->buscaUnidadePorId($solicitante['Pessoa']['id_unidade']);
        $area_solicitante = $this->Area->buscaAreaPorId($solicitante['Pessoa']['id_area']);

        $escopo = $this->Escopo->listaEscopo();
        $usuarioLogado = $this->Session->read('UsuarioLogado');

        //Busca detalhes do chamado por técnico
        $chamados_tecnico = $this->Chamado->buscaChamdosNaoEncerradosPorTecnico($usuarioLogado['id_pessoa']);

        foreach($chamados_tecnico as $i => $chamado_tecnico){
            $solicitante_em_espera =  $this->Pessoa->buscaPessoaPorId($chamado_tecnico['Chamado']['id_pessoa']);
            $chamados_tecnico[$i]['Solicitante'] = $solicitante_em_espera['Pessoa'];
        }


        $listaAfetaAtividades = $this->AfetaAtividades->listaAfetaAtividades();
        $definicaoAfetaAtividades= array();
        foreach ($listaAfetaAtividades as $i => $afetaAtividades){
            if($dados_chamado['Chamado']['id_atividades_diarias'] == $i){
                $definicaoAfetaAtividades['descricao'] = $listaAfetaAtividades[$i];
                $definicaoAfetaAtividades['id'] = $i;
            }
        }

        $this->set('indicadores', $this->Indicador->find('list', array('fields' => 'Indicador.indicador')));
        $this->set('chamados_tecnico', $chamados_tecnico);
        $this->set('escopo', $escopo);
        $this->set('area_solicitante', $area_solicitante);
        $this->set('unidade_solicitante', $unidade_solicitante);
        $this->set('situacao', $situacao);
        $this->set('responsavel', $responsavel);
        $this->set('solicitante', $solicitante);
        $this->set('listaNomesTecnicos', $listaNomesTecnicos);
        $this->set('prioridade', $prioridade);
        $this->set('areas', $areas);
        $this->set('unidades', $unidades);
        $this->set('grupo', $grupo);
        $this->set('subGrupo', $subGrupo);
        $this->set('dados_chamado', $dados_chamado);
        $this->set('definicaoAfetaAtividades', $definicaoAfetaAtividades);


    }

    public function comunicar(){

        if ($this->request->is('post')) {
            $lista_aguardando_comunicacao = $this->request->data['Comunicar'];

            foreach($lista_aguardando_comunicacao as $id_chamado){

                $interacoes_por_chamado = $this->Interacoes->buscarAguardandoEnvioPorChamado($id_chamado);
                $chamado = $this->Chamado->buscaChamdoPorId($id_chamado);
                $solicitante = $this->Pessoa->buscaPessoaPorId($chamado['Chamado']['id_pessoa']);

                $usuarioLogado = $this->Session->read('UsuarioLogado');

                $interacoes_para_enviar = array();
                foreach ($interacoes_por_chamado as $interacao) {
                    $interacoes_para_enviar[] = $interacao['Interacoes'];
                    $interacao['Interacoes']['data_envio_notificacao'] = Tools::formataDataMySQL(date("d/m/Y"));
                    $interacao['Interacoes']['id_tecnico_env_notificacao'] = $usuarioLogado['id_pessoa'];
                    $this->Interacoes->save($interacao['Interacoes']);
                }

                $this->email($solicitante, $interacoes_para_enviar, $chamado['Chamado']);

            }

            $this->Session->write("msg_sucesso", "Notificações enviadas.");
            $this->redirect(array('action' => 'comunicar/'));

        }

        $notificacoes_pendentes = $this->Chamado->buscaTodasInteracoesPorChamado();

        $this->set("chamado_notificacao_pendente", $notificacoes_pendentes);

    }

    public function encerrados(){
	$lista_chamados_encerrados = $this->Chamado->buscaChamadosEncerrados();
        $encerrados = array();
        if(!is_null($lista_chamados_encerrados)){
            foreach ($lista_chamados_encerrados as $k => $encerrados){
                $lista_chamados_encerrados[$k]['Solicitante'] = $this->Pessoa->buscaPessoaPorId($encerrados['Chamado']['id_pessoa']);
                $lista_chamados_encerrados[$k]['Responsavel'] = $this->Pessoa->buscaPessoaPorId($encerrados['Chamado']['id_dados_tecnico']);
            }
        }

        $this->set('listar_encerrados', $lista_chamados_encerrados);
    }

    public function todos(){

    	$lista_dados_tecnicos = $this->DadosTecnico->find('all');
		$lista_detalhada_chamado_por_tecnico = array();
    	$detalhes_chamado = array();

        $total_chamados = 0;
    	foreach ($lista_dados_tecnicos as $i => $dados_tecnico) {

            //Busca infromação do ténico
            $detalhes_tecnico = $this->DadosTecnico->busca_detalhes_tecnico_por_id($dados_tecnico['DadosTecnico']['id_pessoa']);
            $detalhes_chamado['DetalhesTecnico'] = $detalhes_tecnico;

            $chamados = $this->Chamado->preencheTelaTodos($dados_tecnico['DadosTecnico']['id_pessoa']);

            if(!empty($chamados)){
                //Procura solicitante de cada chamado
        		foreach ($chamados as $j => $chamado) {

        			$busca_pessoa = $this->Pessoa->buscaPessoaPorId($chamado['Chamado']['id_pessoa']);
                    $chamados[$j]['Pessoa'] = $busca_pessoa['Pessoa'];
                    $buscaPrioridadePorId = $this->Prioridade->buscaPrioridadePorId($chamado['Chamado']['id_prioridade']);
                    $chamados[$j]['Chamado']['descricao_prioridade'] = $buscaPrioridadePorId['Prioridade']['descricao'];
                    $buscaSituacaoPorId = $this->Situacao->buscaSituacaoPorId($chamado['Chamado']['id_situacao_chamado']);
                    $chamados[$j]['Chamado']['descricao_situacao'] = $buscaSituacaoPorId['Situacao']['situacao'];
                    $detalhes_chamado['Chamados'] = $chamados;
                    $total_chamados++;
        		}
                $lista_detalhada_chamado_por_tecnico[$dados_tecnico['DadosTecnico']['id_pessoa']] = $detalhes_chamado;
            }
        }

        $this->set('total_chamados', $total_chamados);
    	$this->set('lista_detalhada_chamado_por_tecnico', $lista_detalhada_chamado_por_tecnico);

    }

    public function interacoes($numero_chamado, $layout = false){
        $this->layout = "padrao_tela";
        if($layout){
            $this->layout = 'telaChamados';
        }
        $todas_interacoes = $this->Interacoes->buscaPorChamado($numero_chamado);
        foreach ($todas_interacoes as $i => $interacao){
            $responsavel = $this->Pessoa->buscaPessoaPorId($interacao['Interacoes']['id_dados_tecnico']);
            $todas_interacoes[$i]['Responsavel'] = $responsavel['Pessoa'];
        }

        $this->set('todas_interacoes', $todas_interacoes);

    }

/***************************
Função utilizada na tela de busca.
***************************/
    public function buscar(){

        $lista_dados_tecnicos = $this->DadosTecnico->find('all');
        $lista_detalhada_chamado_por_tecnico = array();
        $detalhes_chamado = array();

        $total_chamados = 0;
        foreach ($lista_dados_tecnicos as $i => $dados_tecnico) {

            //Busca infromação do ténico
            $detalhes_tecnico = $this->DadosTecnico->busca_detalhes_tecnico_por_id($dados_tecnico['DadosTecnico']['id_pessoa']);
            $detalhes_chamado['DetalhesTecnico'] = $detalhes_tecnico;

            $chamados = $this->Chamado->buscaChamdosPorTecnico($dados_tecnico['DadosTecnico']['id_pessoa']);

            if(!empty($chamados)){
                //Procura solicitante de cada chamado
                foreach ($chamados as $j => $chamado) {

                    $busca_pessoa = $this->Pessoa->buscaPessoaPorId($chamado['Chamado']['id_pessoa']);
                    $chamados[$j]['Pessoa'] = $busca_pessoa['Pessoa'];
                    $buscaPrioridadePorId = $this->Prioridade->buscaPrioridadePorId($chamado['Chamado']['id_prioridade']);
                    $chamados[$j]['Chamado']['descricao_prioridade'] = $buscaPrioridadePorId['Prioridade']['descricao'];
                    $buscaSituacaoPorId = $this->Situacao->buscaSituacaoPorId($chamado['Chamado']['id_situacao_chamado']);
                    $chamados[$j]['Chamado']['descricao_situacao'] = $buscaSituacaoPorId['Situacao']['situacao'];
                    $detalhes_chamado['Chamados'] = $chamados;
                    $total_chamados++;
                }
                $lista_detalhada_chamado_por_tecnico[$dados_tecnico['DadosTecnico']['id_pessoa']] = $detalhes_chamado;
            }

        }

        $this->set('total_chamados', $total_chamados);
        $this->set('lista_detalhada_chamado_por_tecnico', $lista_detalhada_chamado_por_tecnico);




    }

    /*
    * método responsável por encerrar os chamados.
    */
    public function encerrar($id_chamado, $form_chamado){

        $this->Chamado->id = $id_chamado;
        $chamado_base = $this->Chamado->read();
        $this->Chamado->set($chamado_base['Chamado']);//Deve passar o chamado na base para vertificar se ele já está encerrado.

        if (!$this->Chamado->validates()) {
            //Se o chamado da base já estiver encerrado ou seja id_situacao_chamado for igual há 5.
            $erros = $this->Chamado->validationErrors;
            $this->Session->write('validation_errors', $erros);
        }
        else{

            /**
             * Nesse caso foi necessário usar um else, pois o id_situacao_chamado será tribuido para 5 então o validate irá bloquear o update na tabela.
             * array('validate' => false) desabilita a validação.
             */
            $chamado_base['Chamado']['id_situacao_chamado'] = 5; //Encerrar Chamado.

            if(empty($form_chamado['solucao_chamado'])){
                $this->Session->write("msg_erro", "Preencha o campo: Solução do Chamado e atualize o chamado antes de encerrar.");
                $this->redirect(array('action' => 'escopo_chamado/' . $id_chamado));
            }
            else{
                $chamado_base['Chamado']['solucao_chamado'] = $form_chamado['solucao_chamado'];
            }
            if(empty($form_chamado['horas_realizadas'])){
                $this->Session->write("msg_erro", "Verifique os campos Horas Realizadas e Data Atendimento, antes de encerrar o Chamado.");
            }
            else{
                $chamado_base['Chamado']['hora_realizada'] = $form_chamado['horas_realizadas'];
                $chamado_base['Chamado']['data_atendimento'] = Tools::formataDataMySQL($form_chamado['data_antendimento']);
                if(empty($form_chamado['data_antendimento'])){
                    $chamado_base['Chamado']['data_atendimento'] = Tools::formataDataMySQL(date('d/m/Y'));
                }

                if($this->Chamado->save($chamado_base['Chamado'], array('validate' => false))){
                    $aviso_encerrado = array();
                    $aviso_encerrado[]['observacao'] = "Chamado nº: " . $chamado_base['Chamado']['id'] . ", foi encerrado em " . Tools::formataData(date('Y/m/d H:i:s'));
                    $aviso_encerrado[]['observacao'] = "Solução do chamado: " . $chamado_base['Chamado']['solucao_chamado'];
                    $solicitante = $this->Pessoa->buscaPessoaPorId($chamado_base['Chamado']['id_pessoa']);
                    $this->email($solicitante, $aviso_encerrado,$chamado_base['Chamado']);
                    $this->Session->write("msg_sucesso", "O Chamado foi encerrado.");
                }
            }
        }

        $this->redirect(array('action' => 'escopo_chamado/' . $id_chamado));

    }

    public function resposta($id){

        $id = base64_decode($id);

        $this->Chamado->id = $id;
        $chamado = $this->Chamado->read();
        if(empty($chamado)){
            $this->Session->write("msg_erro", "Chamado não encontrado.");
            $this->redirect(array('action' => '/'));
        }

        if(is_null($id)){
            $this->Session->write("msg_erro", "Chamado não encontrado.");
            $this->redirect(array('action' => '/'));
        }
        if($this->request->is('post')){
            $interacao = array();

            if($chamado['Chamado']['id_situacao_chamado'] == 5){//Encerrados
                $this->Session->write("msg_erro", "O chamado já está encerrado não é possivel enviar mensagem.");
                $this->redirect(array('action' => 'resposta/' . base64_encode($chamado['Chamado']['id'])));
            }
            $usuarioLogado = $this->Session->read('UsuarioLogado');
            if(is_null($usuarioLogado)){
                $interacao['id_dados_tecnico'] = $chamado['Chamado']['id_pessoa'];
                $interacao['id_tecnico_env_notificacao'] = $chamado['Chamado']['id_pessoa'];
            }
            else{
                $interacao['id_dados_tecnico'] = $usuarioLogado['id_pessoa'];
                $interacao['id_tecnico_env_notificacao'] = $usuarioLogado['id_pessoa'];
            }

            $interacao['data_hora'] = date('Y/m/d H:i:s');

            $interacao['id_chamado'] = $chamado['Chamado']['id'];
            $interacao['data_envio_notificacao'] = date('Y/m/d H:i:s');

            $interacao['observacao'] = $this->request->data['Resposta']['observacao'];

            if(empty($interacao['observacao'])){
                $this->Session->write("msg_erro", "Preencha o campo.");
                $this->redirect(array('action' => 'resposta/' . base64_encode($id)));
            }

            if($this->Interacoes->save($interacao)){
                $this->Session->write("msg_sucesso", "Mensagem registrada.");
            }
            else{
                $this->Session->write("msg_erro", "Foi encontrado um problema para enviar a mensagem");
            }
            $this->redirect(array('action' => 'resposta/' . base64_encode($id)));
        }

        $this->layout = "form_resposta_cliente";

        $todas_interacoes = $this->Interacoes->buscaPorChamado($id);
        foreach ($todas_interacoes as $i => $interacao){
            $responsavel = $this->Pessoa->buscaPessoaPorId($interacao['Interacoes']['id_dados_tecnico']);
            $todas_interacoes[$i]['Responsavel'] = $responsavel['Pessoa'];
        }

        $this->set('todas_interacoes', $todas_interacoes);
    }

}
?>